<?PHP
/**
 * OpenStation
 *
 * @Application : Cookie.class.php
 * @Encode : 65001 Unicode ( UTF-8 NO BOM )
 * @Description : Cookie 封装类
 * @Author : HK <hkyyang@gmail.com>
 * @Version : 1.0.0
 */

class Cookie {


    /**
     * set 方法，设置Cookie值
     *
     * @static
     * @access public
     * @param String : $name, cookie名称
     * @param String | Array: $value, cookie 值
     * @param Integer : $expire, cookie 最大有效时间
     * @param String : $path
     * @param String : $domain
     * @param Boolean : $noConvert
     * @return Void
     */
    static public function set( $name, $value, $expire = NULL, $path = NULL, $domain = NULL, $noConvert = FALSE ) {
        $path = empty( $path ) ? '/' : $path;
        // 默认为项目配置中的Cookie最大有效时间
        if ( is_null( $expire ) ) {
            $expire = Cache :: get( '@.COOKIE.EXPIRE' );
        }
        // 设置最大有效时间
        $expire = ! empty( $expire ) ? time() + $expire : 0;
        if( ! is_null( $value ) ) {
            if( ! $noConvert ) {
                $value = base64_encode( serialize( $value ) );
            } else {
                $value = base64_encode( $value );
            }
        }
        $cookie_name = Cache :: get( '@.COOKIE.PREFIX' ) . $name;
        setcookie( $cookie_name, $value, $expire, $path, $domain );
        $_COOKIE[ $cookie_name ] = $value;
    }

    /**
     * get 方法，获取Cookie值
     *
     * @static
     * @access public
     * @param String : $name, cookie名称
     * @param Boolean : $noConvert
     * @return *
     */
    static public function get( $name = NULL, $noConvert = FALSE ) {
        if( is_null( $name ) ) {
            return $_COOKIE;
        }
        $cookie_name = string_prepend_replace( $name, Cache :: get( '@.COOKIE.PREFIX' ) );
        if( ! isset( $_COOKIE[ $cookie_name ] ) ) {
            return NULL;
        }
        if( $noConvert ) {
            return base64_decode( $_COOKIE[ $cookie_name ] );
        } else {
            return unserialize( base64_decode( $_COOKIE[ $cookie_name ] ) );
        }
    }

    /**
     * is_set 方法，判断一个Cookie是否设置
     *
     * @static
     * @access public
     * @param String : $name, cookie名称
     * @return Boolean
     */
    static public function is_set( $name ) {
        return isset( $_COOKIE[ Cache :: get( '@.COOKIE.PREFIX' ) . $name ] );
    }

    /**
     * remove 方法，删除一个Cookie值
     *
     * @static
     * @access public
     * @param String : $name, cookie名称
     * @return Void
     */
    static function remove( $name = NULL, $path = NULL, $domain = NULL ) {
        // 清空Cookie
        if( is_null( $name ) ) {
            unset( $_COOKIE );
        // 清除一个值
        } else {
            // 通过设置有效时间清除一个值
            Cookie :: set( Cache :: get( '@.COOKIE.PREFIX' ) . $name, NULL, -3600, $path, $domain );
        }
    }
}

?>